home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / docs / ippon / ver / 050 / ippon050.lzh / maketbl.c < prev    next >
C/C++ Source or Header  |  2000-07-07  |  2KB  |  105 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. #define SPEED_MAX    32
  6. double speed[SPEED_MAX] =
  7. {0.50, 0.60, 0.70, 0.80, 0.90,
  8.  1.00, 1.10, 1.20, 1.30, 1.40, 1.50, 1.60, 1.70, 1.80, 1.90,
  9.  2.00, 2.10, 2.20, 2.30, 2.40, 2.50, 2.60, 2.70, 2.80, 2.90,
  10.  3.00, 3.10, 3.20,
  11.  4.00, 5.00, 6.00, 7.00};
  12.  
  13.  
  14. typedef struct {
  15.     signed int x, y;
  16. } VECTOR;
  17.  
  18. unsigned char pstable[256][256];
  19. VECTOR xytable[SPEED_MAX][256];
  20. unsigned char rndtable[256];
  21.  
  22.  
  23. void usage (void)
  24. {
  25.     printf (
  26.                "IPPON.X 用テーブルを作成する maketbl.x ver0.01\n"
  27.                "        programmed by Mitsuky <FreeSoftware>\n"
  28.                "以下のテーブルを作成します\n"
  29.                "    TBL/PSTABLE.DAT     : 自機サーチテーブル\n"
  30.                "    TBL/RNDTABLE.DAT : 乱数テーブル\n"
  31.                "    TBL/XYTABLE.DAT     : sin,cos テーブル\n"
  32.            "角度関係のは全て1周=256段階で、右向きが0、下向きが64となっております\n"
  33.         );
  34. }
  35.  
  36.  
  37.  
  38. int maketable (void)
  39. {
  40.     int i, j;
  41.     FILE *fp;
  42.  
  43.     printf ("データテーブルを作成します。\n");
  44.  
  45.     printf ("少々時間が掛かります。申し訳ありません。\n"
  46.         "( arctan を 256x256 個計算しています。)\n");
  47.     for (i = 0; i < 256; i++) {
  48.         printf ("%3d/256\x1b[0J\n\x0b", i + 1);
  49.         for (j = 0; j < 256; j++) {
  50.             pstable[i][j] = (unsigned char) (atan ((double) j / (double) i) * 256.0 / 2.0 / M_PI);
  51.         }
  52.     }
  53.     fp = fopen ("TBL/PSTABLE.DAT", "wb");
  54.     if (fp == NULL) {
  55.         printf ("TBL/PSTABLE.DAT が書き込めません\n");
  56.         exit (-1);
  57.     }
  58.     fwrite (pstable, 256 * 256, sizeof (unsigned char), fp);
  59.     fclose (fp);
  60.  
  61.  
  62.     for (i = 0; i < 256; i++)
  63.         rndtable[i] = (unsigned char) ((rand () / 4) & 255);
  64.     fp = fopen ("TBL/RNDTABLE.DAT", "wb");
  65.     if (fp == NULL) {
  66.         printf ("TBL/RNDTABLE.DAT が書き込めません\n");
  67.         exit (-1);
  68.     }
  69.     fwrite (rndtable, 256, sizeof (unsigned char), fp);
  70.     fclose (fp);
  71.  
  72.  
  73.     for (i = 0; i < SPEED_MAX; i++) {
  74.         for (j = 0; j < 256; j++) {
  75.             xytable[i][j].x = (signed int) (cos (2.0 * M_PI * (long) j / 256.0) * 65536.0 * speed[i]);
  76.             xytable[i][j].y = (signed int) (sin (2.0 * M_PI * (long) j / 256.0) * 65536.0 * speed[i]);
  77.         }
  78.     }
  79.     fp = fopen ("TBL/XYTABLE.DAT", "wb");
  80.     if (fp == NULL) {
  81.         printf ("TBL/XYTABLE.DAT が書き込めません\n");
  82.         exit (-1);
  83.     }
  84.     fwrite (xytable, 256 * SPEED_MAX, sizeof (VECTOR), fp);
  85.     fclose (fp);
  86.  
  87.  
  88.     printf ("\n終了しました。\n");
  89.  
  90.     return (0);
  91. }
  92.  
  93.  
  94.  
  95. int main (int argc, char *argv[])
  96. {
  97.     if (argc != 1) {
  98.         usage ();
  99.         return (-1);
  100.     }
  101.     maketable ();
  102.  
  103.     return (0);
  104. }
  105.